如何理解java中的record类 |
您所在的位置:网站首页 › set a record翻译 › 如何理解java中的record类 |
如何理解java中的record类
背景
java14才出来的record,类似于enum,定义了一种特殊的类。 用于标记不可变的数据类。 正常写法定义一个用户类,一般会这么定义 //User.class public class User { private String name = null; private String password = null; public User(String name, String password) { this.name = name; this.password = password; } public String getName() { return name; } public String getPassword() { return password; } @Override public boolean equals(Object o) { //用于判断是否相等 if (this == o) return true; if (!(o instanceof User)) return false; User user = (User) o; return name.equals(user.name) && password.equals(user.password); } @Override public int hashCode() { //hash算法 return Objects.hash(name, password); } @Override public String toString() { return "user{" + "name='" + name + '\'' + ", password='" + password + '\'' + '}'; } }写个程序验证一下 public class test { public static void main(String[] args) { User1 user = new User1("XiaoMing", "123456"); User1 user2 = new User1("XiaoMing", "123456"); System.out.println(user.name()); System.out.println(user.password()); System.out.println(user); System.out.println(user.equals(user2)); } }输出 XiaoMing 123456 User1[name=XiaoMing, password=123456] true 使用record完成与上面相同的类,使用record,需要怎么写呢? 只用一行: public record User1(String name,String password) {}写个程序测试一下: public class test { public static void main(String[] args) { User1 user = new User1("XiaoMing", "123456"); System.out.println(user.name()); System.out.println(user.password()); System.out.println(user); } }输出: XiaoMing 123456 User1[name=XiaoMing, password=123456]分析: getName方法变成了name,但是功能一样的,只是命名方式变了因为是不可变数据类型,没有set方法自动toString,虽然最后结果不一样,但是可以正常看,不是com.czcode.customer.User@b66c70b0这种玩意了自动实现equals,如果不覆盖这个方法,两个对象比较时候会比较指向的对象是不是同一个对象,这个只是比了里面的值是否相等。总结: 这种类其实就是帮你写好了样例代码 继续进阶一下record中可以覆盖构造方法、创建静态方法、定义自己的方法 看代码 public record User1(String name, String password) { //再定义一个构造方法 public User1(String name) { this(name, null); } //额外定义的方法 public String nameToUppercase() { return this.name.toUpperCase(); } //静态方法 public static String nameAddPassword(User1 user1) { return user1.name + user1.password; } }测试代码 public class test { public static void main(String[] args) { User1 user = new User1("XiaoMing", "123456"); System.out.println(user.nameToUppercase()); System.out.println(User1.nameAddPassword(user)); User1 userAnotherConstructor = new User1("hello"); System.out.println(userAnotherConstructor); } }输出 XIAOMING XiaoMing123456 User1[name=hello, password=null] 总结这个关键字其实就相当于替你创建了一些样例代码(toSting,构造方法等),同时给你增加了一定限制条件(无法设置某个属性的值)。 有什么问题欢迎沟通学习~ |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |